8 任务编号:C4-008“明细”功能实现
8.1 任务描述
前
置任务:C4-007
业务模块:“明细“功能
实现“明细“功能。
任务类型:按步骤操作
8.2 详细实现步骤
明细功能主要包括收入的增加和显示,支出的增加和显示等,主要代码均在MainActivity中。
下图是“明细”界面,收入明细使用红色显示,支出使用绿色显示。
图 21 “明细”运行界面
8.2.1 初始化收入类型
收入类型数据使用spinner组件来实现,并且需要在程序运行初对其进行初始化。具体方法是从数据库读取数据后,通过setAdapter方法绑定到spinner组件。
private void initSpinnerEarningType(){
View view=viewList.get(0);
Spinner spinner=(Spinner)view.findViewById(R.id.spinnerEarningType);
List<String> items=accountDatabase.SelectEarningTypeStringsAll();
ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,items);
spinner.setAdapter(adapter);
accountDatabase.DeleteEarningAll();
}
8.2.2 初始化支出类型
同收入类型初始化类似,也是从数据库读取数据后,在spinner组件中显示。
private void initSpinnerExpenditureType(){
View view=viewList.get(0);
Spinner spinner=(Spinner)view.findViewById(R.id.spinnerExpenditureType);
List<String> items=accountDatabase.SelectExpenditureTypeStringsAll();
ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,items);
spinner.setAdapter(adapter);
}
8.2.3 初始化增加收入和增加支出按钮
当用户单击增加收入或增加支出按钮时,从界面上读取数据,然后把数据放入到数据库中。
private void initDetailsButton(){
View view=viewList.get(0);
final Spinner spinnerEarning=(Spinner)view.findViewById(R.id.spinnerEarningType);
final EditText textEarning=(EditText)view.findViewById(R.id.txtEarningAmount);
Button buttonNewEarning=(Button)view.findViewById(R.id.buttonNewEarning);
buttonNewEarning.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String type=spinnerEarning.getSelectedItem().toString();
String account=textEarning.getText().toString();
accountDatabase.InsertEarning(type,account);
refreshEarningLiseView();
initOwnView();
}
});
final Spinner spinnerExpenditure=(Spinner)view.findViewById(R.id.spinnerExpenditureType);
final EditText textExpenditure=(EditText)view.findViewById(R.id.txtExpenditureAmount);
Button buttonNewExpenditure=(Button)view.findViewById(R.id.buttonNewExpenditure);
buttonNewExpenditure.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String type=spinnerExpenditure.getSelectedItem().toString();
String account=textExpenditure.getText().toString();
accountDatabase.InsertExpenditure(type,account);
refreshExpenditureLiseView();
initOwnView();
}
});
}
8.2.4 显示收入明细
明细使用ListView组件显示,为了显示更加清楚,增加一个列表项的布局文件。
FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="cn.edu.bistu.cs.se.accountbook.MainActivity"
>
<
LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="left|top"
android:background="#FF4500"
>
<
TextView android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/typeEarningName"/
>
<
TextView android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/transactionEarningDate"/
>
<
TextView android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/accountEarning"/
>
<
/LinearLayout
>
<
/FrameLayout
>
当从数据库中读取数据后,使用ListView显示出来。
private void refreshEarningLiseView(){
View view=viewList.get(0);
ArrayList
<
Map
<
String, String
>
>
items = accountDatabase.getAllEarnings();
SimpleAdapter adapter = new SimpleAdapter(this, items, R.layout.layout_earning_item_details,
new String[]{Earning.TableAttr.COLUMN_FK_TYPE, Earning.TableAttr.COLUMN_ACCOUNT_DATE,Earning.TableAttr.COLUMN_AMOUNT},
new int[]{R.id.typeEarningName, R.id.transactionEarningDate,R.id.accountEarning});
ListView listView=view.findViewById(R.id.ListEarnings);
listView.setAdapter(adapter);
}
8.2.5 显示支出明细
同前类似,定义列表项显示布局:
<
FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="cn.edu.bistu.cs.se.accountbook.MainActivity"
>
<
LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="left|top"
android:background="#00FF00"
>
<
TextView android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/typeExpenditureName"/
>
<
TextView android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/transactionExpenditureDate"/
>
<
TextView android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/accountExpenditure"/
>
<
/LinearLayout
>
<
/FrameLayout
>
然后从数据库中读取数据后,在列表中显示出来。
private void refreshExpenditureLiseView(){
View view=viewList.get(0);
ArrayList
<
Map
<
String, String
>
>
items = accountDatabase.getAllExpenditures();
SimpleAdapter adapter = new SimpleAdapter(this, items, R.layout.layout_expenditure_item_details,
new String[]{Expenditure.TableAttr.COLUMN_FK_TYPE, Expenditure.TableAttr.COLUMN_ACCOUNT_DATE,Expenditure.TableAttr.COLUMN_AMOUNT},
new int[]{R.id.typeExpenditureName, R.id.transactionExpenditureDate,R.id.accountExpenditure});
ListView listView=view.findViewById(R.id.ListExpenditures);
listView.setAdapter(adapter);
}